//
//  ADUTabBarViewController.m
//  微博OC-01
//
//  Created by lanouhn on 16/6/23.
//  Copyright © 2016年 lanouhn. All rights reserved.
//

#import "ADUTabBarViewController.h"
#import "ADUTabBar.h"
#import "ADUTabBar2.h"


@interface ADUTabBarViewController ()<ADUTabBar2Delegate>
/**
 *  自定义TabBar 系统有一个tabbar不能重名
 */
@property (nonatomic, weak) ADUTabBar2 *customTabBar;
@end

@implementation ADUTabBarViewController

- (instancetype)init
{
    if (self = [super init]) {
        //打印第几行的方法
        DDLogDebug(@"%d %s", __LINE__ , __func__);
    }
    return self;
}

// init方法内部会调用initWithNibName方法, 所以在自定义控制器时可以把初始化的代码放到initWithNibName方法中, 以后无论是通过init方法还是通过initWithNibName都可以初始化
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        DDLogDebug(@"%d %s", __LINE__ , __func__);
        // 4.创建子控制器
        
        UIViewController *home = [self addControllerWithClass:[UIViewController class] title:@"首页" image:@"tabbar_home" selectedImage:@"tabbar_home_highlighted"];
        UIViewController *message = [self addControllerWithClass:[UIViewController class] title:@"消息" image:@"tabbar_message_center" selectedImage:@"tabbar_message_center_highlighted"];
        UIViewController *discover = [self addControllerWithClass:[UIViewController class] title:@"发现" image:@"tabbar_discover" selectedImage:@"tabbar_discover_highlighted"];
        UIViewController *profile = [self addControllerWithClass:[UIViewController class] title:@"我" image:@"tabbar_profile" selectedImage:@"tabbar_profile_highlighted"];
//        self.viewControllers = @[home, message, discover, profile];
    }
    return self;
}

/*
 当发现过多冗余代码时候需要抽取代码
 1.把相同的代码放到一个方法中
 2.把不确定的代码通过参数传递进来
 3.在使用的地方调用方法即可
 */

/**
 *  根据一个类创建一个控制器
 *
 *  @param class         控制器对应的类
 *  @param title         标题
 *  @param image         默认状态的图片
 *  @param selectedImage 选择状态图片
 *
 *  @return 创建好的控制器
 */
- (UIViewController *)addControllerWithClass:(Class)class title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage
{
    /*
     注意: 不是所有的控制器都是通过init方法初始化的
     */
    UIViewController *vc = [[class alloc] init];
    return [self addControllerWithVc:vc title:title image:image selectedImage:selectedImage];
}

/**
 *  根据一个创建好的控制器初始化控制器
 *
 *  @param vc            控制器
 *  @param title         标题
 *  @param image         默认图片
 *  @param selectedImage 选中图片
 *
 *  @return 初始化之后的控制器
 */
- (UIViewController *)addControllerWithVc:(UIViewController *)vc title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage
{
    vc.tabBarItem.title = title;
    vc.tabBarItem.image = [UIImage imageNamed:image];
    /*
     iOS7需要通过代码告诉系统不要用tabBar.tintColor来渲染选中图片
     */
    // 1.创建图片
    UIImage *newImage =  [UIImage imageNamed:selectedImage];
    // 2.告诉系统原样显示
    newImage = [newImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    // 3.设置图片
    vc.tabBarItem.selectedImage = newImage;
    vc.view.backgroundColor = ADURandomColor;
    
    // 设置tabBarButton的标题颜色
    // 设置文字的属性有一个规律:NSXXXXXAttributeName
    [vc.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor orangeColor]} forState:UIControlStateSelected];
    
#pragma mark-----
    
    
    
    //添加控制器到tabbarcontroller
    [self addChildViewController:vc];
    //每添加一个控件要创建对应一个按钮
    [self.customTabBar addItem: vc.tabBarItem];
    
    
    return vc;
}
/**
 *viewDidLoad 仅仅象征控制器的View创建完毕,他的子控件还没创建 viewWillAppear子控件创建完毕
 */
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //    DDLogDebug(@"subviews = %@", self.tabBar.subviews);
    
    // 1.创建自定义TabBar
//    ADUTabBar *tabBar = [[ADUTabBar alloc] init];
  
//    DDLogDebug(@"替换前 %@", self.tabBar);
    // 2.用自定义的CZTabBar替换系统的TabBar
    //    self.tabBar = tabBar;  self.tabBar是只读的不能设置,一般我们设置不了属性用KVC
    // KVC, KVC的实现原理基于运行时, 它可以在运行时动态的修改属性
    /**
     不能直接 用一个uiview 给一个tabbar赋值
     *  reason: '-[ADUTabBar2 _setBarOrientation:]: unrecognized selector sent to instance 0x7fab115d9fa0'
     */
//    [self setValue:tabBar forKeyPath:@"tabBar"];
//    DDLogDebug(@"替换后 %@", self.tabBar);
    /**
    调整一个控件子控件子控件在layoutSubviws方法中
     */
    
    
    //1.创建自定义ADUTabBar
    ADUTabBar2 *tabBar = [[ADUTabBar2 alloc] init];
    
    //设置代理
    tabBar.delegate = self;
    //2.设置ADUTabBar2的fram
    tabBar.frame = self.tabBar.frame;
    //3.添加ADUTabBar到父控件
    [self.view addSubview:tabBar];
    
    
    //记录一下tabbar
    self.customTabBar = tabBar;
    //4.移除系统自带的tabbar
    [self.tabBar removeFromSuperview];
}



- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    //    DDLogDebug(@"subviews = %@", self.tabBar.subviews);
    /**
     *  tabBar子控件的frame是系统设置改变不了,我们可以自定义控件  tabbar四个按钮移动一下  中间加一个按钮
     自定义一个tabBar替换掉 self.tabBar
     */
   
    for (UIView *child in self.tabBar.subviews) {
        child.frame = CGRectMake(0, 0, 100, 100);
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark--------ADUTabBar2Delegate
-(void)tabBar:(ADUTabBar2 *)tabBar selectedBtnFrom:(NSInteger)from to:(NSInteger)to{
    
//    DDActionLog;
//    DDLogDebug(@"from =%tu to = %tu",from,to);
    
    //切换控制器 两种方法
    self.selectedIndex = to;
    
    //1.取出当前选中按钮对应的控制器
//    UIViewController *vc = self.childViewControllers[to];
//    self.selectedViewController = vc;
}

@end
